package com.gxp.system.service;

import com.gxp.system.domain.ZknjRequest;
import com.gxp.system.domain.ZknjSample;
import com.gxp.system.domain.ZknjServiceInstance;

import java.util.List;
import java.util.Map;

/**
 * 请求Service接口
 * 
 * @author zh
 * @date 2024-08-06
 */
public interface IZknjRequestService 
{
    /**
     * 查询请求
     * 
     * @param reqId 请求主键
     * @return 请求
     */
    public ZknjRequest selectZknjRequestByReqId(Long reqId);

    /**
     * 查询请求列表
     * 
     * @param zknjRequest 请求
     * @return 请求集合
     */
    public List<ZknjRequest> selectZknjRequestList(ZknjRequest zknjRequest);

    /**
     * 新增请求
     * 
     * @param zknjRequest 请求
     * @return 结果
     */
    public int insertZknjRequest(ZknjRequest zknjRequest);

    /**
     * 修改请求
     * 
     * @param zknjRequest 请求
     * @return 结果
     */
    public int updateZknjRequest(ZknjRequest zknjRequest);

    /**
     * 批量删除请求
     * 
     * @param reqIds 需要删除的请求主键集合
     * @return 结果
     */
    public int deleteZknjRequestByReqIds(String reqIds);

    /**
     * 删除请求信息
     * 
     * @param reqId 请求主键
     * @return 结果
     */
    public int deleteZknjRequestByReqId(Long reqId);

    /***
     * 取消申请
     */
    int cancelZknjRequestByReqIds(String id);

    /**
     * request 提交
     * @param zkRequest
     * @return
     */
    int submit(ZknjRequest zkRequest);

    /**
     * 申请信息修改
     */
    int updateSevAndSam(ZknjSample sample, ZknjServiceInstance serviceActive);

    /**
     * 查询历史请求列表
     * @param zknjRequest
     * @return
     */
    List<ZknjRequest> selectZknjRequestListForHistory(ZknjRequest zknjRequest);

    /**
     * 提交到自动化试验后修改状态
     */
    void updateStatus(List<String> expcodes, Long status);

    /**
     * 自动化实验返回拉取成功或者失败，对应修改状态
     */
    void updateStatus(String expcodes, Long status);

    /**
     * 通过项目id查询请求列表
     * @return
     */
    List<ZknjRequest> selectZknjRequestListByProIds(ZknjRequest zknjRequest);

    /**
     * 通过实验id查询请求
     * @param infId
     * @return
     */
    ZknjRequest selectZknjRequestByInfId(Long infId);

    /**
     * 更新请求状态
     * @param zknjRequest
     */
    void updateZknjRequestStatus(ZknjRequest zknjRequest);

    /**
     * 插入请求样本和修改
     *
     * @param sample
     * @param reqId
     * @param servicesAudit
     */
    void insertReqSamMod(ZknjSample sample, Long reqId, List<Map<String, String>> servicesAudit);

    /**
     * 更新请求样本和修改
     * @param sample
     * @param reqId
     */
    void updateReqSamMod(ZknjSample sample, Long reqId);

    /**
     * 查询待审核的请求列表
     * @param zknjRequest
     * @return
     */
    List<ZknjRequest> selectZknjRequestListForVerify(ZknjRequest zknjRequest);

    /**
     * 重新审核请求
     * @param id
     * @return
     */
    int reapproveZknjRequestByReqIds(String id);

    /**
     * 查询请求id列表(分页)
     * @param zknjRequest
     * @return
     */
    List<Long> selectZknjRequestIdList(ZknjRequest zknjRequest);

    /**
     * 查询请求列表（根据ID列表）
     * @param ids
     * @return
     */
    List<ZknjRequest> selectZknjRequestListByIds(List<Long> ids);
}
